<?php
/**
 * 控制器的基础类，可以在这里添加全局都需要做的事情，比如读取用户信息以及载入权限控制信息,日志系统
 *
 * @author lfYang
 *        
 */
abstract class Action {
	protected $_sysInfo;
	private $_logger;
	/**
	 * 构造函数
	 * 用来这里装载用户信息
	 */
	public function __construct() {
		Logger::configure ( ROOT_PATH . 'config/log_config.xml' );
		$this->_logger = Logger::getLogger ( __CLASS__ );
		$this->_sysInfo = new SysInfoModel ();
	}
	
	/**
	 * 发送Header跳转
	 *
	 * @param string $redirect
	 *        	URL redirect to
	 */
	protected function _redirect($redirect) {
		if (! empty ( $redirect ) && strlen ( $redirect ) > 0) {
			header ( "Location:{$redirect}" );
			exit ();
		} else {
			GF::oops ( "Redirect URI cannot be empty!!!" );
		}
	}
	
	/**
	 * showStatus
	 *
	 * 在一些操作完成后显示操作状态，并跳转到指定页面
	 *
	 * @param string $statusMessaage
	 *        	提示消息
	 * @param string $url
	 *        	要跳转的页面
	 * @param int $delay
	 *        	跳转的延迟
	 * @param bool $redirect
	 *        	指定是否跳转
	 */
	protected function _showStatus($statusMessage, $forwardTo = "", $delay = 3, $isRedirect = true) {
		$notice = $statusMessage;
		$redirect = $isRedirect;
		$url = $forwardTo;
		include ROOT_PATH . 'templates/default/notice.tpl.php';
		exit ();
	}
	
	/**
	 * getError
	 * 返回存储错误消息的数组
	 *
	 * @return array
	 */
	public function getError() {
		return $this->error;
	}
	
	/**
	 * hasError
	 * 返回是否有错误
	 *
	 * @return bool
	 */
	public function hasError() {
		return count ( $this->error ) > 0;
	}
	
	/**
	 * addError
	 * 添加指定的错误消息，如果指定的消息名称已经存在，则将其转化为数组存储多条消息
	 *
	 * @param string $name        	
	 * @param string $msg        	
	 * @return bool
	 */
	public function addError($name, $msg) {
		if (empty ( $name )) {
			return false;
		}
		if (is_array ( $this->error [$name] )) {
			$this->error [$name] [] = $msg;
		} else {
			if (isset ( $this->error [$name] )) {
				$this->error [$name] [0] = $this->error [$name];
			} else {
				$this->error [$name] = $msg;
			}
		}
		return true;
	}
	
	/**
	 * setError
	 * 设置指定的错误消息，如果指定的消息名称已经存在，则覆盖已经存在的消息
	 *
	 * @param string $name        	
	 * @param string $msg        	
	 * @return bool
	 */
	public function setError($name, $msg) {
		if (empty ( $name )) {
			return false;
		}
		$this->error [$name] = $msg;
		return true;
	}
	public $error = array ();
}